home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1995 #5 & #6
/
Amiga Plus CD - 1995 - No. 5 and 6.iso
/
pd
/
netz
/
mailfilter
/
arexx
/
convert_u-to.mailfilter
< prev
Wrap
Text File
|
1995-07-09
|
3KB
|
163 lines
/* Convert_U-TO.mailfilter */
/*
** $VER: Convert_U-TO.mailfilter 1.1 (9.7.95)
**
** Dieses Script ist für das Filtern von Mails aus Mailing-Listen
** gedacht, es sucht nach einem 'U-TO:'-Header und wandelt diesen,
** falls vorhanden, in 'DISKUSSION-IN:'. Der 'EMP:'-Header wird
** durch Umwandeln in 'X-MAILFILTER:' unwirksam gemacht, dafür
** wird ein neuer 'EMP:'-Header hinzugefügt.
**
** Dieses Script ist nur ein Beispiel, es muß von jedem an seine
** speziellen Bedürfnisse angepasst werden.
*/
/*
** Hier kann der Name des Brettes konfiguriert werden,
** in das die Nachrichten umgeleitet werden sollen.
*/
brettname = '/-PM-/MAILINGLIST'
/*
** Ergebnisse anfordern
*/
OPTIONS RESULTS
/*
** Headerdatei einlesen und Header gegebenenfalls umwandeln
*/
anzahl = 0
IF OPEN('header','T:MailFilter_Header.mftemp','READ') THEN DO
DO WHILE ~EOF('header')
/*
** Eine Zeile einlesen, aber ACHTUNG! Die ARexx-Funktion 'READLN()'
** enthält einen Bug und kann deshalb nur Zeilen mit höchstens 1000
** Zeichen einlesen, zum Einlesen von Headerzeilen deshalb immer die
** Funktion 'ReadZeile()' benutzen!
*/
zeile.anzahl = ReadZeile('header')
/*
** Abbrechen, wenn der Header zu Ende ist
*/
IF zeile.anzahl = '' THEN
BREAK
/*
** Wenn die Nachricht einen 'U-TO:'-Header enthält,
** dann wird dieser in 'DISKUSSION-IN:' umgewandelt
*/
IF UPPER(LEFT(zeile.anzahl,5)) = 'U-TO:' THEN
zeile.anzahl = 'DISKUSSION-IN:'||SUBSTR(zeile.anzahl,6)
/*
** Den 'EMP:'-Header durch umwandeln in 'X-MAILFILTER:'
** unwirksam machen
*/
IF UPPER(LEFT(zeile.anzahl,4)) = 'EMP:' THEN
zeile.anzahl = 'X-MAILFILTER:'||SUBSTR(zeile.anzahl,5)
/*
** Zähler erhöhen, die abschließende Leerzeile wird nicht mitgezählt
*/
anzahl = anzahl+1
END
END
/*
** Headerdatei schließen
*/
CALL CLOSE('header')
/*
** Neuen 'EMP:'-Header eintragen
*/
zeile.anzahl = 'EMP:' brettname
anzahl = anzahl+1
zeile.anzahl = ''
/*
** Headerdatei neu schreiben
*/
IF OPEN('header','T:MailFilter_Header.mftemp','WRITE') THEN DO
/*
** Alle Zeilen (einschließlich der abschließenden Leerzeile !!!)
** neu in die Headerdatei schreiben
*/
DO i = 0 TO anzahl
CALL WRITELN('header',zeile.i)
END
END
/*
** Script beenden
*/
EXIT(0)
/*
** Diese Funktion liest eine beliebig lange Zeile aus einer Datei
** und umgeht damit den Bug in der ARexx-Funktion 'READFILE()'!
**
** Als Argument muß der logische Name der Datei übergeben werden.
** Die Funktion liefert als Ergebnis die eingelesene Zeile.
*/
ReadZeile:
PROCEDURE
PARSE ARG datei
/*
** Eine Zeile einlesen
*/
zeile = READLN(datei)
/*
** Prüfen ob das letzte gelesene Zeichen ein LF war, wenn nicht
** weiterlesen bis ein LF gefunden wird.
*/
DO FOREVER
CALL SEEK(datei,-1,'CURRENT')
zeichen = READCH(datei)
IF zeichen = '0A'x THEN
BREAK
ELSE
zeile = zeile||READLN(datei)
END
RETURN(zeile)